class Solution {
public:
    int maxProfit(vector<int>& prices) {
       int n=prices.size();
       vector<vector<int>> dp(n,vector<int>(3));//dp[i]有三个状态:买入，可交易，冷冻期
       dp[0][0]=0-prices[0];dp[0][1]=0;dp[0][2]=0;
       for(int i=1;i<n;i++){
           dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);//又可交易状态并买下、买入状态不操作可得到买入状态
           dp[i][1]=max(dp[i-1][1],dp[i-1][2]);//由冷冻期状态、可交易状态不交易可得到可交易状态
           dp[i][2]=dp[i-1][0]+prices[i];//由买入状态并卖出可得到冷冻期状态
       }
       return max(dp[n-1][0],max(dp[n-1][1],dp[n-1][2]));
    }
};

